package cl.jsoftlabs.gwt.soccer.client.ui.jugadores;

import cl.jsoftlabs.gwt.soccer.client.AppConstantes;
import cl.jsoftlabs.gwt.soccer.client.bean.ContratoJugadorVO;
import cl.jsoftlabs.gwt.soccer.client.bean.FutbolClubModel;
import cl.jsoftlabs.gwt.soccer.client.bean.FutbolClubVO;
import cl.jsoftlabs.gwt.soccer.client.bean.JugadorVO;
import cl.jsoftlabs.gwt.soccer.client.bean.PaisVO;

import cl.jsoftlabs.gwt.soccer.client.services.JugadorService;

import com.extjs.gxt.ui.client.Registry;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.Style.Orientation;
import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.data.BeanModelFactory;
import com.extjs.gxt.ui.client.data.BeanModelLookup;
import com.extjs.gxt.ui.client.data.BeanModelMarker;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.Dialog;
import com.extjs.gxt.ui.client.widget.Info;
import com.extjs.gxt.ui.client.widget.Text;
import com.extjs.gxt.ui.client.widget.Window;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.button.ButtonBar;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.DateField;
import com.extjs.gxt.ui.client.widget.form.FormPanel;
import com.extjs.gxt.ui.client.widget.layout.FormData;
import com.extjs.gxt.ui.client.widget.layout.RowLayout;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.rpc.AsyncCallback;

public class FormularioContrato extends Window {
	
	Text txtNombreDelJugador = new Text("Nombre del Jugador");
	ComboBox<ModelData> cpoClubDeFutbol = new ComboBox<ModelData>();
	DateField cpoFechaDeContratacion = new DateField();
	DateField cpoFechaDeTermino = new DateField();
	private JugadorVO jugador;
	ContratoJugadorVO contrato = new ContratoJugadorVO();
	Button btnCancelar;
	Button btnGuardarCambios;
	
	//RETORNO AL INICIAR EL FORMULARIO Y LA BUSQUEDA
	private AsyncCallback<JugadorVO> callbackBuscarRegitro = new AsyncCallback<JugadorVO>() {
		@Override
		public void onSuccess(JugadorVO result) {
			if (result == null) {
				setHeading("Nuevo Registro");
			} else {
				jugador = result;
				txtNombreDelJugador.setText(jugador.getNombres() + " "
						+ jugador.getApellidos());
				setHeading("Modificar Registro");
			}
		}

		@Override
		public void onFailure(Throwable caught) {
			Info.display("Consulta de Registro", "Ocurrio un Error");
		}
	};
	
	private AsyncCallback<Integer> callbackGuardarRegistro = new AsyncCallback<Integer>() {
		
		@Override
		public void onSuccess(Integer result) {
			Info.display("Codigo Resultado", " "+result);		
		}
		
		@Override
		public void onFailure(Throwable arg0) {
			// TODO Auto-generated method stub
			
		}
	};

	public FormularioContrato() {
		setHeading("Contrato Jugador - Club");
		setLayout(new RowLayout(Orientation.VERTICAL));
		
		FormPanel frmpnlContratoJugador = new FormPanel();
		frmpnlContratoJugador.setHeaderVisible(false);
		frmpnlContratoJugador.setHeading("Contrato Jugador");
		frmpnlContratoJugador.setCollapsible(true);
		
		ListStore<ModelData> clubesListStore = Registry.get(AppConstantes.CLUBES_STORE_LIST);
		
		
		frmpnlContratoJugador.add(txtNombreDelJugador, new FormData("100%"));
		txtNombreDelJugador.setHeight("30");
		
		
		cpoClubDeFutbol.setStore(clubesListStore);
		frmpnlContratoJugador.add(cpoClubDeFutbol, new FormData("100%"));
		cpoClubDeFutbol.setFieldLabel("Club de Futbol");
		cpoClubDeFutbol.setDisplayField("nombreClub");
		
		
		frmpnlContratoJugador.add(cpoFechaDeContratacion, new FormData("100%"));
		cpoFechaDeContratacion.setFieldLabel("Fecha de Contratacion");
		
		
		frmpnlContratoJugador.add(cpoFechaDeTermino, new FormData("100%"));
		cpoFechaDeTermino.setFieldLabel("Fecha de Termino");
		add(frmpnlContratoJugador);
		
		ButtonBar buttonBar = new ButtonBar();
		buttonBar.setAlignment(HorizontalAlignment.CENTER);
		
		btnCancelar = new Button("Cancelar");
		btnGuardarCambios = new Button("Guardar Cambios");
		
		btnGuardarCambios.setIconStyle("save");
		btnCancelar.setIconStyle("cancel");
		
		activarAccionesBotones();
		
		buttonBar.add(btnGuardarCambios);
		buttonBar.add(btnCancelar);
		setBottomComponent(buttonBar);
	}
	
	
	
	
	private void activarAccionesBotones() {
		btnGuardarCambios.addSelectionListener(new SelectionListener<ButtonEvent>() {
			public void componentSelected(ButtonEvent ce) {
				
				contrato.setJugador(jugador);
			
				FutbolClubVO bean = new FutbolClubVO();
				BeanModelFactory factory = BeanModelLookup.get().getFactory(FutbolClubVO.class);
				BeanModel modelClub = factory.createModel(bean);
				modelClub= (BeanModel) cpoClubDeFutbol.getValue();
				
				bean = modelClub.getBean();
								
				contrato.setFechaContratacion(cpoFechaDeContratacion.getValue());
				contrato.setFechaVigencia(cpoFechaDeContratacion.getValue());
				contrato.setFutbolClub(bean);
				
				Dialog d = new Dialog();
				Text t = new Text();
				t.setText(contrato.toString());
				d.add(t);
				d.show();
				
				Info.display(jugador.getIdJugador()+" - "+bean.getIdFutbolClub(), contrato.toString());
				JugadorService.Util.getInstance().nuevoContrato(contrato, callbackGuardarRegistro);
			}
		});
	}




	@Override
	protected void onRender(Element parent, int pos) {
		super.onRender(parent, pos);
	}

	public void setJugador(JugadorVO data) {
		this.jugador = data;
		buscarRegistroModificacion();
	}
	
	private void buscarRegistroModificacion() {	JugadorService.Util.getInstance().obtenerRegistro(jugador.getIdJugador(), callbackBuscarRegitro); }


}
